import axios from 'axios';
import type { AxiosRequestConfig, AxiosResponse } from 'axios';
import { Toast } from 'antd-mobile';
import { history } from 'umi';

// 创建 axios 实例
const request = axios.create({
    baseURL: 'http://localhost:3001/api', // 修改为实际的接口地址
    timeout: 10000,  // 请求超时时间
});

// 请求拦截器
request.interceptors.request.use(
    (config) => {
        // 从 localStorage 获取 token
        const token = localStorage.getItem('token');
        // console.log('Request Config:', config); // 添加请求日志
        
        // 如果有 token 就带上
        if (token && config.headers) {
            // 根据后端要求设置 token 格式
            config.headers.Authorization = `${token}`;
        }
        
        return config;
    },
    (error) => {
        console.error('Request Error:', error); // 添加请求错误日志
        return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    (response: AxiosResponse) => {
        return response.data;  // 直接返回 response.data，而不是整个 response
    },
    (error) => {
        if (error.response) {
            const { status, data } = error.response;
            console.log('Error Response:', { status, data });

            switch (status) {
                case 401:
                    Toast.show({
                        icon: 'fail',
                        content: data.message || '认证失败，请重新登录',
                    });
                    localStorage.removeItem('token');
                    history.replace('/login');
                    break;
                    
                case 403:
                    Toast.show({
                        icon: 'fail',
                        content: data.message || '没有权限',
                    });
                    break;
                    
                case 404:
                    Toast.show({
                        icon: 'fail',
                        content: data.message || '请求的资源不存在',
                    });
                    break;
                    
                case 500:
                    Toast.show({
                        icon: 'fail',
                        content: data.message || '服务器错误',
                    });
                    break;
                    
                default:
                    Toast.show({
                        icon: 'fail',
                        content: data.message || '请求失败',
                    });
            }
        } else if (error.request) {
            Toast.show({
                icon: 'fail',
                content: '网络错误，请检查网络连接',
            });
        } else {
            Toast.show({
                icon: 'fail',
                content: '请求配置错误',
            });
        }
        
        return Promise.reject(error);
    }
);

export default request; 